home *** CD-ROM | disk | FTP | other *** search
- /*
-
- written by Daniel Balster, dbalster@uni-paderborn.de
- */
-
- #include <exec/exec.h>
- #include <dos/dos.h>
- #include <devices/cd.h>
- #include <proto/exec.h>
- #include <proto/dos.h>
-
- #define TEMPLATE "PAUSE/S,PLAY/S,TRACK/N/K,LENGTH/N/K,FADE/N/K,VOLUME/N/K,MOTOR/N/K,SEARCH/N/K"
-
- /*
- PAUSE -> drive is in PAUSE mode (laser beam locks)
-
- PLAY -> drive is in PLAY mode (laser beam unlocks)
-
- TRACK -> track to play. default is first track
-
- LENGTH -> how many tracks to play. default is 1000 tracks (only used in conjunction with TRACK)
-
- FADE -> duration of volume fade. default is 0 (only used in conjunction with VOLUME)
-
- VOLUME -> volume from 0..16383. default is maximum volume. <2048 == mute audio
-
- MOTOR -> 0 to stop drive motor, 1 to restart drive motor.
-
- SEARCH -> play mode: 0 is normal mode (default), 1 is fast forward and 2 is fast reverse mode
-
- */
-
- struct {
- ULONG pause,play,track,length,fade,volume,motor,search;
- BOOL quiet;
- ULONG pads[7];
- } args = {0};
-
- void pause (struct IOStdReq *ior, int pausemode)
- {
- ior->io_Command = CD_PAUSE;
- ior->io_Data = NULL;
- ior->io_Length = pausemode;
- ior->io_Offset = 0;
- DoIO(ior);
- }
-
- void motor (struct IOStdReq *ior, int state)
- {
- ior->io_Command = CD_MOTOR;
- ior->io_Data = NULL;
- ior->io_Length = state;
- ior->io_Offset = 0;
- DoIO(ior);
- }
-
- void playtrack (struct IOStdReq *ior, int numtracks, int firsttrack)
- {
- ior->io_Command = CD_PLAYTRACK;
- ior->io_Data = NULL;
- ior->io_Length = numtracks;
- ior->io_Offset = firsttrack;
- SendIO(ior);
- }
-
- void playmode (struct IOStdReq *ior, int playmode)
- {
- ior->io_Command = CD_SEARCH;
- ior->io_Data = NULL;
- ior->io_Length = playmode;
- ior->io_Offset = 0;
- DoIO(ior);
- }
-
- void attenuate (struct IOStdReq *ior, int duration, int volume)
- {
- ior->io_Command = CD_ATTENUATE;
- ior->io_Data = NULL;
- ior->io_Length = duration;
- ior->io_Offset = volume;
- DoIO(ior);
- }
-
- int main (void)
- {
- struct RDArgs *rdargs;
- struct MsgPort *mp;
- struct IOStdReq *ior;
- int length=1, fade=0;
-
- if (rdargs=ReadArgs(TEMPLATE,(LONG*)&(args),NULL))
- {
- if(!args.quiet) PutStr("*** CD Audio v1.0.0 *** by Daniel Balster\n");
-
- if(mp=CreateMsgPort())
- {
- if(ior=(struct IOStdReq*)CreateIORequest(mp,sizeof(struct IOStdReq)))
- {
- if(!OpenDevice("cd.device",0,ior,0))
- {
- if (args.pause) pause(ior,1);
- if (args.play) pause(ior,0);
-
- if (args.length) length = *(ULONG*)args.length;
- if (args.track) playtrack(ior,length,*(ULONG*)args.track);
-
- if (args.fade) fade = *(ULONG*)args.fade;
- if (args.volume) attenuate(ior,fade,*(ULONG*)args.volume);
-
- if (args.motor) motor(ior,*(ULONG*)args.motor);
-
- if (args.search) playmode(ior,*(ULONG*)args.search);
-
- CloseDevice((struct IORequest*)ior);
- }
- else PutStr("cannot access cd.device?\n");
-
- DeleteIORequest((struct IORequest*)ior);
- }
- else PutStr("cannot create ioreq?\n");
-
- DeleteMsgPort(mp);
- }
- else PutStr("cannot create msgport?\n");
-
- FreeArgs(rdargs);
- }
- else PrintFault(IoErr(),0);
-
- return RETURN_OK;
- }